home *** CD-ROM | disk | FTP | other *** search
/ Amiga Games: Greatest Hits 1996 / Amiga Games: Greatest Hits 1996.iso / archive / userbox / publicdomain / frexxed.lha / frexxed / fpl / RCSControl.FPL < prev    next >
Text File  |  1996-04-01  |  11KB  |  309 lines

  1. // $Id: RCSControl.FPL 1.17 1996/04/01 15:54:34 jskov Exp $
  2. // $VER: RCSControl.FPL 1.5 (01.01.96) © Jesper Skov $
  3.  
  4. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Check Out ««
  5. void export RCSCheckOut()
  6. {
  7.   int oldLine = ReadInfo("line");            // Grab cursor position
  8.   int oldByte = ReadInfo("byte_position");
  9.   int success=1;
  10.  
  11.   Status(0,"Checking out...");                // Tell user we're working
  12.   if (System("bin:co -l \""+ReadInfo("full_file_name")+"\"")){
  13.     success = 0;
  14.     if(Request("Check out error!\nProbably the file is already check out!\n(Consult the readme for more help)","RCS request","Force check out!|OK"))
  15.       if (System("bin:co -l -f \""+ReadInfo("full_file_name")+"\"")){
  16.         if(!Request("Check out error again!\nTry to check the file out by hand!\n(Consult the readme for more help)","RCS request","Sigh!|Just change that bloody w-flag, will ya'!")){
  17.           SetInfo(-1,"protection",ReadInfo("protection")+"w");
  18.           return;
  19.         }
  20.       } else
  21.         success=1;
  22.   }
  23.   if (success){
  24.     if(ReadInfo("RCStimeWork"))                // Attach co-time
  25.       System("Filenote \""+ReadInfo("full_file_name")+"\" \""+GetDate(-1,0x30)+"\"");
  26.     
  27.     Status(0,"Reloading...");                // Tell user we're working
  28.     SetInfo(-1,"protection",ReadInfo("protection")+"w");
  29.     Load(ReadInfo("full_file_name"));        // Reload to get protection bit
  30.                                                // and ensure correct contents
  31.     GotoLine(oldLine, oldByte);                // Reposition cursor
  32.     CenterView();
  33.   }
  34. }
  35.  
  36. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Setup comment buffer ««
  37. void export EnterRCSComment(int ReLock)
  38. {
  39.   int RevisionID = New();                    // Make comment buffer
  40.   int OrgBuffer = CurrentBuffer(RevisionID);
  41.  
  42.   if(ReadInfo("RCStimeWork")){
  43.     string from, to=GetDate(-1,0x30);
  44.     System("List > t:RCSTime \""+ReadInfo("full_file_name",OrgBuffer)+"\" lformat \"%c\"");
  45.     from = LoadString("t:RCSTime");
  46.     if(strlen(from)==24)                    // RAM: comments
  47.       from = substr(from,1,17);
  48.     else if(strlen(from)==18)                // Disk devices
  49.       from = substr(from,0,17);
  50.     else from="";
  51.     if(strlen(from))
  52.       Output("Time: "+from+" - "+to+" = "+timeDiff(from, to)+"\n\n");
  53.   }
  54.   Output("\n");
  55.   CursorUp();
  56.   Rename("*RCS Comment*");                    // rename it
  57.   SetInfo(RevisionID, "_IsRCSBuffer", 1);    // and fill parent data
  58.   SetInfo(RevisionID, "_RCSParentBuffer", OrgBuffer);
  59.   SetInfo(RevisionID, "_RCSReLock", ReLock);
  60.   ReturnStatus("Press C-c C-c when comment is complete!");
  61. }
  62.  
  63. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» timeDiff() ««
  64. string timeDiff(string from, string to)
  65. {
  66.   int f = atoi(substr(from,9,2))*3600+atoi(substr(from,12,2))*60+atoi(substr(from,15,2));
  67.   int t = atoi(substr(to,9,2))*3600+atoi(substr(to,12,2))*60+atoi(substr(to,15,2));
  68.  
  69.   
  70.   if ((t -= f)<0)
  71.     t += 24*60*60;                            // add a day
  72.   
  73.   return sprintf("%.2d:%.2d:%.2d",(t/3600),((t%3600)/60),(t%3600)%60);
  74. }
  75.  
  76.  
  77. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Check In ««
  78. void export RCSCheckIn()
  79. {
  80.   int ParentID = ReadInfo("_RCSParentBuffer");
  81.   int export thisID = CurrentBuffer(ParentID);
  82.   int reLock = ReadInfo("_RCSReLock",thisID);
  83.   string CommentName = "T:RCSComment"+itoa(thisID); // build temp name
  84.   string ParentName  = ReadInfo("full_file_name", ParentID); // get parent name
  85.   string lock = "-u";                        // How the file should be locked
  86.  
  87.   if (reLock)                                // If user wants to reLock,
  88.     lock = "-l";                            // change lock-mode.
  89.  
  90.   Save();                                    // Save parent buffer
  91.   CurrentBuffer(thisID);                    // and get back to comment buffer
  92.  
  93.   Rename(CommentName);                        // Rename
  94.   Save();                                    // and save comment buffer
  95.   CurrentBuffer(ParentID);                    // return control to parent
  96.  
  97.   Status(0,"Checking in...");                // Tell user we're working...
  98.  
  99.  
  100.   if (System("bin:ci "+lock+" \""+ParentName+"\" < "+CommentName)) // Check In
  101.     if(Request("Check in error!\nShould I try to check the file out first?\n(Consult the readme for more help)","RCS request","Yes|No!"))
  102.       if(System("bin:co -l \""+ParentName+"\"")){ // try to lock file
  103.         Request("Check out error!\n(Consult the readme for more help)","RCS request","Panic!");
  104.         reLock = 1;
  105.       } else {
  106.         Save();                                // save again (protection bits changed)
  107.         if (System("bin:ci "+lock+" \""+ParentName+"\" < "+CommentName)){ // retry Check In
  108.           Request("New attept to check in failed!\n(Consult the readme for more help)","RCS request","Panic!");
  109.           reLock = 1;
  110.         }
  111.       }
  112.     else {
  113.       Request("OK, master. Remember that your changes are not checked in!","RCS request","Panic!");
  114.       reLock = 1;
  115.     }
  116.  
  117.  
  118.   MaximizeView();                            // Make parent only view
  119.  
  120.   System("delete "+CommentName);            // Delete comment file
  121.   Clean("Kill(thisID);");                    // and the comment buffer
  122.  
  123.   if (!reLock)                                // If lock not retained
  124.     SetInfo(-1,"protectionbits", ReadInfo("protectionbits")|4);
  125.                                                 // writeprotect parent buffer
  126. }
  127.  
  128.  
  129. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» ChangeWFlag ««
  130. void export ChangeWFlag(int ReLock)
  131. {
  132.   int isRCS;
  133.   isRCS = Check(ReadInfo("full_file_name")+",v","");
  134.   isRCS = isRCS || Check(ReadInfo("file_path")+"RCS/"+ReadInfo("file_name"),"");
  135.  
  136.   if ((ReadInfo("protectionbits")&4)){
  137.     if (isRCS){
  138.       RCSCheckOut();
  139.     } else {
  140.       SetInfo(-1,"protectionbits",ReadInfo("protectionbits")&0xfffb);
  141.                                             // if not an RCS file, just alter
  142.     }                                        // the write protection flag.
  143.   } else {
  144.     if (isRCS)
  145.       EnterRCSComment(ReLock);
  146.     else {
  147.       if (Request("Should I put the file under RCS control?","RCS request","Yes|No")){
  148.         if (!Check(ReadInfo("file_path")+"RCS")){
  149.           // Ask to create RCS dir
  150.           if (Request("Do you want me to create an RCS directory?","RCS request","Yes|No")){
  151.             // Creat RCS dir
  152.             System("makedir "+ReadInfo("file_path")+"RCS");
  153.           }
  154.         }
  155.         Request("This first comment will be used for file description.\nDo not enter revision specific information!", "RCS info","Um, OK!");
  156.         EnterRCSComment(ReLock);
  157.       } else {
  158.         SetInfo(-1,"protectionbits",ReadInfo("protectionbits")|4);
  159.                                             // if not an RCS file, just alter
  160.       }                                         // the write protection flag.
  161.     }
  162.   }
  163. }
  164.  
  165.  
  166. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Make history ««
  167. export void RCSMakeHistory()
  168. {
  169.   System("bin:rlog \""+ReadInfo("full_file_name")+"\" >t:RCSHistory"); // Get history created
  170.   CurrentBuffer(New());
  171.   Load("T:RCSHistory");
  172.       
  173.   DeleteLine(11);                        // and make it a bit more readable:
  174.   while (!Search("date:","=of+")){
  175.     Search(";");
  176.     DeleteEol();
  177.   }
  178.   GotoLine(1);
  179.  
  180.   System("Delete T:RCSHistory");
  181.   SetInfo(-1,"changes",0);
  182.   Visible(1);
  183.   RedrawScreen();
  184. }
  185.  
  186. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» RCSRename() ««
  187. export void RCSRename()
  188. {
  189.   string newName = PromptString(ReadInfo("file_name"),"Enter new name...");
  190.  
  191.   if(strlen(newName)){
  192.     string oldName = ReadInfo("full_file_name");
  193.     
  194.     Rename(Stcgfp(ReadInfo("full_file_name"))+newName);
  195.     System("Rename \""+oldName+"\" TO \""+ReadInfo("full_file_name")+"\"");
  196.     
  197.     if(Check(oldName+",v"))                    // RCS file in same directory
  198.       System("Rename \""+oldName+",v\" TO \""+ReadInfo("full_file_name")+",v\"");
  199.       
  200.     newName = ReadInfo("full_file_name");
  201.     newName = Stcgfp(newName)+"RCS/"+Stcgfn(newName);
  202.  
  203.     oldName = Stcgfp(oldName)+"RCS/"+Stcgfn(oldName); // check <file> in RCS dir
  204.     if(Check(oldName))
  205.       System("Rename \""+oldName+"\" TO \""+newName+"\"");
  206.  
  207.     oldName += ",v";                        // check <file>,v in RCS dir
  208.     if(Check(oldName)){
  209.       newName += ",v";
  210.       
  211.       System("Rename \""+oldName+"\" TO \""+newName+"\"");
  212.     }
  213.   }
  214. }
  215.  
  216. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» RCSMakeTimeLog() ««
  217. export void RCSMakeTimeLog()
  218. {
  219.   int t=0;
  220.   string l = ReadInfo("full_file_name");
  221.   
  222.   System("rlog >t:RCSTime \""+ReadInfo("full_file_name")+"\"");
  223.   CurrentBuffer(New());
  224.   Load("t:RCSTime");
  225.   
  226.   GotoLine(0);                                // Delete all non-time lines
  227.   while(ReadInfo("line")<ReadInfo("lines")){
  228.     if(strncmp(GetLine(),"Time: ",6))
  229.       DeleteLine();
  230.     else
  231.       CursorDown();
  232.   }
  233.  
  234.   GotoLine(0);
  235.   Output("Time log for file \""+l+"\"\n\n");
  236.   
  237.   while(ReadInfo("line")<ReadInfo("lines")){
  238.     l = GetLine();
  239.     t += atoi(substr(l,46,2))*3600+atoi(substr(l,49,2))*60+atoi(substr(l,52,2));
  240.     CursorDown();
  241.   }
  242.   
  243.   Output("                                              --------\n");
  244.   l = sprintf("%d:%.2d:%.2d",(t/3600),((t%3600)/60),(t%3600)%60);
  245.   for(t=54-strlen(l);t>0;t--)
  246.     Output(" ");
  247.   Output(l+"\n");
  248.   SetInfo(-1,"changes",0);
  249.   System("Delete t:RCSTime");
  250.   
  251.   Activate(0,1);
  252. }
  253.  
  254. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» RCSShowLocked() ««
  255. export void RCSShowLocked()
  256. {
  257.   string path = PromptFile("","Find locked files in...","","d");
  258.   
  259.   if(!GetErrNo()){
  260.     SaveString("t:RCSLocks.exe", "failat 25\n");
  261.     System("Delete t:RCSLocks");
  262.     System("List >>t:RCSLocks.exe \""+path+"\" files all lformat \"rlog >>t:RCSLocks -R -L %p%n\"");
  263.     System("Resident `which rlog` PURE");
  264.     System("Execute t:RCSLocks.exe");
  265.     
  266.     CurrentBuffer(New());
  267.     Output("Files locked in \""+path+"\":\n");
  268.     InsertFile("t:RCSLocks");
  269.  
  270.     GotoLine(1);
  271.  
  272.     while(CursorDown())                        // delete every 2nd line
  273.       DeleteLine();
  274.     
  275.     GotoLine(0);
  276.     SetInfo(-1,"changes",0);
  277.     Activate(0,1);
  278.     System("Delete t:RCSLocks");
  279.     System("Delete t:RCSLocks.exe");
  280.     System("Resident rlog REMOVE");
  281.   }
  282. }
  283.  
  284. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Key bindings ««
  285. //AssignKey("ChangeWFlag(0);","control x control q","");
  286. AssignKey("ChangeWFlag(1);","control x control Q","");
  287. AssignKey("RCSCheckIn();","control c control c", "_IsRCSBuffer");
  288. AssignKey("Clean(\"Kill();\");","control g", "_IsRCSBuffer");
  289.  
  290.  
  291. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Info variables ««
  292. ConstructInfo("RCStimeWork","","", "WBG(io)", "",0,1,1);
  293.  
  294. ConstructInfo("_IsRCSBuffer","","", "LBH", "",0,1,0);
  295. ConstructInfo("_RCSReLock","","", "LBH", "",0,1,0);
  296. ConstructInfo("_RCSParentBuffer","","", "LIH", "",0,0x7fffffff,0);
  297.  
  298. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» RCS Menu ««
  299. MenuAdd("i","RCS","","",ReadInfo("Program_Menu"), -1);
  300.  MenuAdd("s","Check Out/In","ChangeWFlag(0);","control x control q",ReadInfo("Program_Menu"), -1);
  301.  MenuAdd("s","---","","",ReadInfo("Program_Menu"), -1);
  302.  MenuAdd("s","Rename...","RCSRename();","",ReadInfo("Program_Menu"), -1);
  303.  MenuAdd("s","---","","",ReadInfo("Program_Menu"), -1);
  304.  MenuAdd("s","Locked files...","RCSShowLocked();","",ReadInfo("Program_Menu"), -1);
  305.  MenuAdd("s","History...","RCSMakeHistory();","",ReadInfo("Program_Menu"), -1);
  306.  MenuAdd("s","Extract time...","RCSMakeTimeLog();","",ReadInfo("Program_Menu"), -1);
  307.  
  308. MenuBuild();
  309.